Package by Layer
アンチパターンとして紹介されることが多い
こういうディレクトリ構造のこと
https://gyazo.com/15be772550e31de4bc361c00c2f18b3b https://twitter.com/MinoDriven/status/1148960876201836546
ドメインごとではなく、レイヤーごとに分けている
https://gyazo.com/aa8e02c2f3be08095d6d236f1a3b2d91
CAのようなレイヤーを、レイヤーごとにディレクトリにしている
これの悪い点
ドメインが分散するので、凝集度が下がる
複数の機能が配置された時、読み返しづらい
どのクラスが、どの機能で使われているのかわかりにくい
どのレイヤーにも適さないモノをどこに配置すればいいのかわからない
これの良い点は、
新機能を実装する時に強制的にレイヤーを分けさせるとかかな
コーディングルールが定まっていない状態や、初心者に取ってわかりやすい(?)
フルスタックフレームワークはこちらを強制してくる
いや、単に「グルーピングの失敗」程度だろうか?
https://gyazo.com/31d05b56c20fbf7919f5e5867f19f4d0
アプリケーションを、
縦方向にはfeature
横方向にはlayer
みたいなイメージで分節する、というのはできている
この上で、どうしてわざわざlayerごとでグルーピングしよう、となるのか
仮に、マイクロサービスのようなノリで、アプリケーションを物理的に分けよう、となった時に、Layerごとにサーバを独立させる、と考えることもできる
Modelだけ集めたサーバ、Viewだけ集めたサーバ、みたいな
絶対うまくいかんだろう、というのが誰でも容易にわかる
ディレクトリ名で表現するのか簡単で、かつ、それ以外の方法が思いつかない、となって飛びつくとか(?)
目指すものが異なるのか?
viewでは、あまりにもsharedが多くなりすぎるので、shared前提で規模で階層構造にしているのかな